// 第一题：
// 1、 下面的输出是什么？
// 2、如果想要每隔一秒输出一个结果应该如何改造，但是不可以修改square方法
const list = [1, 2, 3];
const square = num => {
    return new Promise((resolve, reject) => {
        setTimeout(()=> {
            resolve(num);
        }, 1000);
    })
}

function test() {
    list.forEach(async x => {
        const res = await square(x);
        console.log(res);
    })
};
// test();

// 解答一：隔一秒同时输出1，2，3
// 因为forEach函数是并行的，本质是作用域的问题，效果和下面代码一样
// (async function(x) {
//     const res = await square(x);
//     console.log(x)
// })(x);
// (async function(x) {
//     const res = await square(x);
//     console.log(x)
// })(x);
// (async function(x) {
//     const res = await square(x);
//     console.log(x)
// })(x);

// 改造：变成同步串行
// 1、改成同一个作用域
async function test2() {
    for (var i = 0; i < list.length; i++) {
        const res = await square(list[i]);
        console.log(res);
    }
}
// test2();

async function test3() {
    for (item of list) {
        const res = await square(item);
        console.log(res);
    }
}
// test3();

async function test4(x) {
    var promise= Promise.resolve();
    console.log('x=>', x);
    if (x >= list.length) return;
    promise.then(async _ => {
        const res = await square(x);
        console.log(res);
        x++;
        test4(x);
    });
}
test4(0);